void insereChaves(pagina *pag, aluno inf, int posicao, /* numero de chaves */ int tamMax)
{
	pagina * paginaAux, *novaPagina, *novaRaiz, *temp;
	aluno vetAux[tamMax]; /* auxiliar no deslocamento */
	int i, posicaoAux, posicaoNova, j;
	
	if(pag->info[tamMax-1].ra != -1) /* se o ultimo tiver chave, ou seja, se a pagina estiver cheia */
	{
		/* pagina auxiliar com um campo de chave e de ponteiro a mais */
		paginaAux = (pagina*)malloc(sizeof(pagina));
		paginaAux->info = (aluno*)malloc((tamMax + 1) * sizeof(aluno));
		paginaAux->ponteiros = (pagina**)malloc((tamMax + 2) * sizeof(pagina*));
		paginaAux->pai = NULL;
		
		inicializa(paginaAux, tamMax + 1);
		
		/* copiar a pagina para a auxiliar */
		
		for(i=0; i<tamMax; i++)
			paginaAux->info[i] = pag->info[i];
		
		/* copiando ponteiros */
		for(i=0; i<tamMax + 1; i++)
			paginaAux->ponteiros[i] = pag->ponteiros[i];
		
		/* atualizando pai */
		paginaAux->pai = pag->pai;
		
		/* chama a funcao de busca para ter a posicao a ser inserida a nova chave na paginaAux */
		paginaAux = arvoreb_busca(tamMax + 1, paginaAux, inf.ra, posicaoAux, 0, tamMax + 1);
		
		/* insere a nova chave em paginaAux, cai na condicao de pagina ainda com espaco para inserir */
		insereChaves(paginaAux, inf, posicaoAux, tamMax+1);
		
		/* chama a funcao quebra para dar o split */
		novaPagina = arvoreb_quebra(tamMax, paginaAux);
		
		/* Se o pai de paginaAux for NULL, Cria nova raiz e atualiza ponteiros */
		if(paginaAux->pai == NULL)
		{
			*novaRaiz = arvoreb_cria(tamMax);
			inicializa(novaRaiz, tamMax);
			
			/* o ultimo da novaPagina sera a nova raiz */
			j = tamMax-1;
			while (novaPagina->info[j].ra == -1)
				j--;
			
			insereChaves(novaRaiz,novaPagina->info[j] , 0, tamMax); /* na nova raiz insere na posicao zero */
			
			/* atualiza ponteiro da posicaoPromove */
			novaRaiz->ponteiros[0] = novaPagina;
			novaRaiz->ponteiros[1] = paginaAux;
			
			paginaAux->pai = novaRaiz;
			novaPagina->pai = novaRaiz;
			
			/* limpa o retirado de novaPagina, atualiza a pagina */
			limpaChave(novaPagina, inf, 0, tamMax, tamMax);
		}
		
		/* Se o pai de paginaAux for diferente de NULL, Insere chave Promove no pai (nao insere na folha) */
		
		if(paginaAux->pai != NULL)
		{
			temp = arvoreb_busca(tamMax,paginaAux->pai, inf.ra, posicaoNova,0, tamMax); /* fazer busca sem descer nas folhas, na mesma pagina */
			insereChaves(paginaAux->pai, inf, posicaoNova, tamMax);
		}
	}
	
	else /* inserir em pagina que tem espaco */
	{
		if (pag->info[posicao].ra == -1) /* caso em que a posicao a ser inserida esta vazia */
			pag->info[posicao] = inf;
	
		else /* tem que fazer o deslocamento */
		{
			for(i=posicao; i<tamMax; i++)
			{
				if(pag->info[i].ra != -1)
					vetAux[i] = pag->info[i];
			}
		
			pag->info[posicao] = inf;
		
			for(i=posicao + 1; i<tamMax; i++)
				pag->info[i] = vetAux[i-1];
		}
	}
}

void limpaChave (pagina *pag, aluno inf, int inicio, int fim, int chaves)
{
	int i,j,k, posicao;
	aluno vetAux[chaves]; /* auxiliar para arrumar o vetor resultante apos remocao */
	
	posicao = arvoreb_busca(chaves,pag, inf.ra,posicao, inicio, fim);
	
	pag->info[posicao].ra = -1;
	limpa_string(pag->info[posicao].nome);
	pag->ponteiros[posicao] = NULL;
	
	/* fiz essa parte mas depois vi que era desnecessario, sempre retira o ultimo... 
	/* arruma a pagina restante 
	for(i=0; i<chaves; i++)
	{
		if(pag->info[i].ra == -1 && pag->info[i+1] != -1) /* tem espaco vazio no meio 
		{
			for(j=i+1; j<chaves; j++)
				vetAux[j] = pag->info[j];
			
			for(k=i; k<chaves; k++)
			{	
				if(k+1 < chaves)
					pag->info[k] = vetAux[k+1];
			}
			
			pag->info[k].ra = -1;
			limpa_string(pag->info[k].nome);
			
		}
	} */
}